import types
# 获取对象信息
# 1、基本类型都可以用type()判断对象类型
print(type(123))
print(type('ttt'))
print(type(None))
# 如果一个变量指向函数或者类，也可以用type()判断
print(abs)
class a:
    pass
print(type(a()))
# type()返回对应的Class类型。如果我们要在if语句中判断，就需要比较两个变量的type类型是否相同
print(type(123) == type(444))
print(type('aa') == type('bbb'))
print(type(123) == type('aaa'))

# 判断基本类型可以直接写int str
print(type(123) == int)
print(type('aa') == str)
# 判断一个对象是否是函数，使用types模块中定义的常量
def fn():
    pass
print(type(fn) == types.FunctionType)
print(type(abs) == types.BuiltinFunctionType)
print(type(lambda x : x) == types.LambdaType)
print(type((x for x in range(10))) == types.GeneratorType)

# 判断class的类型，使用isinstance()函数，能用type()判断的基本类型也可以用isinstance()判断
print(isinstance(123,int))
# 还可以判断一个变量是否是某些类型中的一种，比如下面的代码就可以判断是否是list或者tuple
print(isinstance([1,2,3],(list,tuple)))
print(isinstance((1,2,3),(list,tuple)))
